#ifndef __NATION_H__
#define __NATION_H__
#include <iostream>
#include <memory>
class UN;
class Nation
{
public:
    using ptr=std::shared_ptr<Nation>;
    Nation(std::shared_ptr<UN> un):m_un(un){}
    virtual void declare(const std::string& msg)=0;
    virtual void notify(const std::string& msg)=0;
protected:
    std::shared_ptr<UN> m_un;
};

class Usa:public Nation,public std::enable_shared_from_this<Usa>
{
public:
    Usa(std::shared_ptr<UN> un):Nation(un){}
    void declare(const std::string& msg) override;
    void notify(const std::string& msg) override;
};

class Irap:public Nation,public std::enable_shared_from_this<Irap>
{
public:
    Irap(std::shared_ptr<UN> un):Nation(un){}
    void declare(const std::string& msg) override;
    void notify(const std::string& msg) override;
};

#endif